// 权限控制
// 1.路由跳转权限控制
// 2.菜单权限控制
// console.log('权限控制生效了')

import router from '@/router/index.js'
import { getToken } from '@/utils/auth'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import store from '@/store/index.js'

const WHITE_LIST = ['/login', '/404']

router.beforeEach((to, from, next) => {
  const token1 = getToken()
  // to and from are both route objects. must call `next`.
  // console.log(token1)
  // 开启进度条
  NProgress.start()
  if (token1) {
    // 有 token
    if (to.path === '/login') {
      // 取登录页，就直接去主页
      next('/')
    } else {
      next()
      // 这个地方符合三个要求，可以在这类调用actions
      // 其一用户资料的获取依赖于token
      // 其二在跳转首页之后需要立刻获取
      // 其三用户资料里还包含我们将来要做的菜单权限数据还需要满足权限语义化
      // 通过用户id做判断
      if (!store.state.user.userInfo.userId) {
        store.dispatch('user/fetchUserInfo')
      }
    }
  } else {
    // 没有token，是白名单里的，就放行0
    // includes  在..里
    if (WHITE_LIST.includes(to.path)) {
      next()
    } else {
      // 不在白名单去登录页
      next('/login')
    }
  }
  // 隐藏进度条
  NProgress.done()
})
